www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/game_Source/GameLib/dialog/dialog.cpp
//Download by http://www.NewXing.com #include <ddraw.h> #include "..\\..\\main.h" #include "dialog.h" void CALLBACK DialogTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime); RLEBITHEADER * SelectRLE; RLEBITHEADER * DialogRLE; bool DialogSelect = false; int DialogSelectNum = 0; char *dialog_text; int Dialog_func(char *text) { MSG msg; DialogSelect = false; dialog_text = text; SelectRLE = LoadRleImage("pic\\interface\\exittext.ret"); DialogRLE = LoadRleImage("pic\\dialog\\dialog2.ret"); rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); FastBlt(0, 0, rect1, pS[SBack], pS[SBuffer], SP[SBack], SP[SBuffer], false, 0); cursor = 0; PA_SAFE_DELETE(mouseRLE); mouseRLE = LoadRleImage("Pic\\cursor\\cursor01.ret"); cursorT = 4; SetTimer(hwnd, 1, 50, DialogTimer); while(!DialogSelect) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if ( msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { DialogRefreshScreen(); } } KillTimer(hwnd, 1); PA_SAFE_DELETE(SelectRLE); PA_SAFE_DELETE(DialogRLE); return DialogSelectNum; } LRESULT WINAPI DialogMessageProc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam) { switch(message) { case WM_SETCURSOR: SetCursor(NULL); break; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: DialogSelectNum = 2; DialogSelect = true; break; default: return 1; } break; case WM_LBUTTONDOWN: if(DialogSelectNum != 0) { DialogSelect = true; } break; case WM_MOUSEMOVE: curpos.x = LOWORD (lParam); curpos.y = HIWORD (lParam); if(curpos.x > SCREEN_WIDTH - 1 ) { curpos.x = SCREEN_WIDTH-1; SetCursorPos(curpos.x, curpos.y); } if(curpos.y > SCREEN_HEIGHT - 1) { curpos.y = SCREEN_HEIGHT-1; SetCursorPos(curpos.x, curpos.y); } break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 1; } void DialogRefreshScreen() { HDC hdc; CFont cFont; FastBlt(0, 0, rect1, pS[SBuffer], pS[SBack], SP[SBuffer], SP[SBack], false, 0); ShowRleImage_NR((SCREEN_WIDTH-DialogRLE->bfWidth)/2, (SCREEN_HEIGHT-DialogRLE->bfHeight)/2, 0, 0, DialogRLE, pS[SBuffer], SP[SBuffer]); DDS[SBuffer]->GetDC(&hdc); cFont.UseFont(hdc,DCF_USERDEFINE, 20, 800); TEXTMETRIC tm; GetTextMetrics(hdc,&tm); ShowText(hdc, (SCREEN_WIDTH - tm.tmAveCharWidth*strlen(dialog_text))>>1,(SCREEN_HEIGHT>>1)-tm.tmHeight-tm.tmExternalLeading-10, RGB(255,255,0), dialog_text); cFont.RestoreFont(hdc); DDS[SBuffer]->ReleaseDC(hdc); if((curpos.y > SCREEN_HEIGHT/2+5)&&(curpos.y < SCREEN_HEIGHT/2+41)) { if((curpos.x > (SCREEN_WIDTH-DialogRLE->bfWidth/2)/2+10)&&(curpos.x < (SCREEN_WIDTH-DialogRLE->bfWidth/2)/2 + 44)) { if(DialogSelectNum != 1) { DialogSelectNum = 1; } ShowRleImage_NR((SCREEN_WIDTH-DialogRLE->bfWidth/2)/2+10, SCREEN_HEIGHT/2, 2, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR((SCREEN_WIDTH+DialogRLE->bfWidth/2)/2-25, SCREEN_HEIGHT/2, 1, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); } else { ShowRleImage_NR((SCREEN_WIDTH-DialogRLE->bfWidth/2)/2+10, SCREEN_HEIGHT/2, 0, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); if((curpos.x > (SCREEN_WIDTH+DialogRLE->bfWidth/2)/2-25)&&(curpos.x < (SCREEN_WIDTH+DialogRLE->bfWidth/2)/2 + 9)) { if(DialogSelectNum != 2) { DialogSelectNum = 2; } ShowRleImage_NR((SCREEN_WIDTH+DialogRLE->bfWidth/2)/2-25, SCREEN_HEIGHT/2, 3, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); } else { ShowRleImage_NR((SCREEN_WIDTH+DialogRLE->bfWidth/2)/2-25, SCREEN_HEIGHT/2, 1, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); DialogSelectNum = 0; } } } else { ShowRleImage_NR((SCREEN_WIDTH-DialogRLE->bfWidth/2)/2+10, SCREEN_HEIGHT/2, 0, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR((SCREEN_WIDTH+DialogRLE->bfWidth/2)/2-25, SCREEN_HEIGHT/2, 1, 0, SelectRLE, pS[SBuffer], SP[SBuffer]); DialogSelectNum = 0; } RECT rect3; long lW, lH; lW = mouseRLE->bfWidth/mouseRLE->bfWidthBitN; lH = mouseRLE->bfHeight/mouseRLE->bfHeightBitN; rect3.left = 0; rect3.top = 0; rect3.right = curpos.x+lW > SCREEN_WIDTH?SCREEN_WIDTH-curpos.x:lW; rect3.bottom = curpos.y+lH > SCREEN_HEIGHT?SCREEN_HEIGHT-curpos.y:lH; ShowRleImage(curpos.x, curpos.y, cursor, 0, rect3, mouseRLE, pS[SBuffer], SP[SBuffer]); UpdateScreen(); } void CALLBACK DialogTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) { }